Cuando intento iniciar mi aplicación en Heroku, obtuve el siguiente seguimiento de pila. Es solo una ts.app básica como la que ves con ts-node y nodemon. Si necesita más información, solo dígame eso porque es mi primera publicación. Estoy realmente interesado en cuál va a ser la respuesta.
2020-05-30T00:03:12.201106+00:00 heroku[web.1]: Starting process with command `npm start` 2020-05-30T00:03:14.405285+00:00 app[web.1]: 2020-05-30T00:03:14.405303+00:00 app[web.1]: > discordtoornamentmanager@1.0.0 start /app 2020-05-30T00:03:14.405303+00:00 app[web.1]: > ts-node src/App.ts 2020-05-30T00:03:14.405304+00:00 app[web.1]: 2020-05-30T00:03:14.833655+00:00 app[web.1]: (node:23) ExperimentalWarning: The ESM module loader is experimental. 2020-05-30T00:03:14.839311+00:00 app[web.1]: TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /app/src/App.ts 2020-05-30T00:03:14.839312+00:00 app[web.1]: at Loader.defaultGetFormat [as _getFormat] (internal/modules/esm/get_format.js:65:15) 2020-05-30T00:03:14.839314+00:00 app[web.1]: at Loader.getFormat (internal/modules/esm/loader.js:113:42) 2020-05-30T00:03:14.839315+00:00 app[web.1]: at Loader.getModuleJob (internal/modules/esm/loader.js:244:31) 2020-05-30T00:03:14.839315+00:00 app[web.1]: at processTicksAndRejections (internal/process/task_queues.js:97:5) 2020-05-30T00:03:14.839316+00:00 app[web.1]: at Loader.import (internal/modules/esm/loader.js:178:17) 2020-05-30T00:03:14.847801+00:00 app[web.1]: npm ERR! code ELIFECYCLE 2020-05-30T00:03:14.847998+00:00 app[web.1]: npm ERR! errno 1 2020-05-30T00:03:14.848957+00:00 app[web.1]: npm ERR! discordtoornamentmanager@1.0.0 start: `ts-node src/App.ts` 2020-05-30T00:03:14.849050+00:00 app[web.1]: npm ERR! Exit status 1 2020-05-30T00:03:14.849172+00:00 app[web.1]: npm ERR! 2020-05-30T00:03:14.849254+00:00 app[web.1]: npm ERR! Failed at the discordtoornamentmanager@1.0.0 start script. 2020-05-30T00:03:14.849337+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above. 2020-05-30T00:03:14.854859+00:00 app[web.1]: 2020-05-30T00:03:14.854998+00:00 app[web.1]: npm ERR! A complete log of this run can be found in: 2020-05-30T00:03:14.855069+00:00 app[web.1]: npm ERR! /app/.npm/_logs/2020-05-30T00_03_14_850Z-debug.log 2020-05-30T00:03:14.907689+00:00 heroku[web.1]: Process exited with status 1 2020-05-30T00:03:14.943718+00:00 heroku[web.1]: State changed from starting to crashedEste es mi paquete.json
{ "name": "discordtoornamentmanager", "version": "1.0.0", "description": "", "main": "dist/app.js", "type": "module", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "nodemon -x ts-node src/App.ts", "start": "ts-node src/App.ts" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "@types/node": "^14.0.5", "axios": "^0.19.2", "discord.js": "^12.2.0", "pg": "^8.2.1", "reflect-metadata": "^0.1.10", "typeorm": "0.2.25", "typescript": "^3.9.3", "nodemon": "^2.0.4", "ts-node": "8.10.1" } }Y este es mi tsconfig
{ "compilerOptions": { "lib": [ "es6" ], "target": "es6", "module": "commonjs", "moduleResolution": "node", "outDir": "dist", "resolveJsonModule": true, "emitDecoratorMetadata": true, "esModuleInterop": true, "experimentalDecorators": true, "sourceMap": true }, "include": ["src/**/*.ts"], "exclude": ["node_modules", "**/*.spec.ts"] }Cambié mis importaciones de:
import blah from './modules/blah'
para
import blah from './modules.blah.js'
Me encontré con esto si estoy importando código mecanografiado de una biblioteca de reacción pero para un script de back-end, en este caso pruebas de mocha. Está esperando archivos .ts pero creo que encuentra archivos .tsx.
En mi caso, tuve que mover algunas funciones de los archivos de reacción .tsx al código backend .ts con el que estaba trabajando.
Estaba tratando de ejecutar archivos js y ts en el mismo paquete con "type": "module" usando la sintaxis es6 para importaciones. Siguiendo la respuesta de MysteryCommand, funcionó la instalación del paquete ts-node y la ejecución de archivos ts con node --loader ts-node/esm .
"type": "module" de paquete.json si se agregatsconfig.json bajo la propiedad del módulo compilerOptions Set en el módulo CommonJS module: "CommonJS" y moduleResolution: "Node"module: "ESNext" 1- Agregue "type": "module" a paquete.json
2- Instalar ts-node npm i -g ts-node
3- Ve a tsconfig.json y agrega lo siguiente:
{ "compilerOptions": { "module": "ESNext", "moduleResolution": "Node", /* ... your props ... */ }, "ts-node": { "esm": true } } 4- Ejecute ts-node fileName.ts
MARZO 2022
USANDO: Nodo 16.6.2, ts-node v 10.7.0
Lo que funcionó para mí fue tener "type": "module" en package.json y agregar
node --experimental-specifier-resolution=node --loader ts-node/esm ./src/app.tstsconfig.json:
{ "compilerOptions": { "module": "ESNext", "esModuleInterop": true, "target": "ESNext", "moduleResolution": "Node", "outDir": "dist", "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, "isolatedModules": false, "strict": true, "noImplicitAny": true, "useUnknownInCatchVariables": false, "inlineSourceMap": true }, "ts-node": { "esm": true }, "lib": ["esnext"] }Créditos a @FelipePlets por la respuesta útil aquí
EDITAR Es posible que desee utilizar una opción que no esnext la siguiente, según los documentos de ts :
El valor especial de ESNext se refiere a la versión más alta que admite su versión de TypeScript. Esta configuración debe usarse con precaución, ya que no significa lo mismo entre diferentes versiones de TypeScript y puede hacer que las actualizaciones sean menos predecibles.
cambiando mi
"moduleResolution": "node",para
"moduleResolution": "Node",en package.json resolvió esto por mí
Actualización: gracias a algunos mantenedores, el paquete web ahora documenta oficialmente una solución funcional. Solo eche un vistazo a la documentación oficial del paquete web .
La segunda solución es similar a otras respuestas aquí y funciona perfectamente bien en mi caso.
En su paquete.json {Módulo: commonJS}, y tsconfig.json {módulo: commonJS}, a ts-node youname.ts
Agregue esto a tsconfig.json
{ /* ... your props ... */ "ts-node": { "compilerOptions": { "module": "CommonJS" } } }antes de esto:
node --loader ts-node/esm ./my-script.ts
Tuve que actualizar ssri
npm update ssri --depth 5
Me encontré con este problema por primera vez probablemente hace más de un año, y ts-node aún no lo ha solucionado. Ninguna de las soluciones anteriores funcionó para mí, y aparentemente probé todo.
Simplemente recurrí a usar tsc --outDir out file.ts y luego ejecutar el archivo normalmente con node out/file.js , y luego agregarlo out .gitignore .
El pensamiento detrás ts-node es maravilloso, realmente apesta cuando no puede manejar ejemplos aparentemente sencillos como este. Disculpas, la solución no usa ts-node, pero no pude hacer que funcionara.
No estoy seguro de si esto ayudará a alguien, pero lo arreglé poniendo esto al principio:
#!/usr/bin/env nodeEliminando "type": "module" de package.json y agregando:
"compilerOptions": { "module": "CommonJS" }, En tsconfig.json me arregló esto.
Seguí los consejos dados aquí. También tuve que desinstalar lodash-es e instalar lodash en su lugar para que funcionara.
utilizar
node --loader ts-node/esm ./my-script.tsen lugar de
ts-node ./my-script.tsEliminar "type": "module" de paquete.json
https://github.com/TypeStrong/ts-node/issues/935
Si no desea eliminar "type": "module" (por ejemplo, si está usando declaraciones de import en su .ts que permite la inferencia de tipos de módulos), puede usar la siguiente opción en tsconfig.json :
{ "compilerOptions": { "esModuleInterop": true, } } Y luego puede iniciar el servidor con la configuración usando ts-node .
Instalar en pc:
npm install -g ts-nodeCorrer:
ts-node my_server.ts